



//引入ejs  视图

import adminListView from "$v/adminList"


//引入请求 解构
import { addAdminRequest, adminListRequest, deleteRequest, loginRequest, isLoginRequest } from "../api/admin"




//渲染管理员列表函数
const showAdminList = async (res) => {
  //只要进入当前页面马上开始查询 
  //异常处理
  let adminListResult = null
  try {
    adminListResult = await adminListRequest()
    // console.log(adminListResult);
  } catch (e) {
    alert("获取管理员列表异常" + e.message)

    //判断是否是权限异常
    if (!e.isLogin) {
      //权限校验失败返回登录页面 通过比对捕捉e.isLogin.code 的数值20000
      return router.go("/login")
    }

  }
  //渲染二级路由视图
  res.render(adminListView({
    adminList: adminListResult
  }))

}




export default async (req, res, next) => {
  //路由切换的时候验证登录
  try {
    await isLoginRequest()
  } catch (e) {
    alert("有异常:" + e.message)

    //判断是否是权限异常
    if (!e.isLogin) {
      //权限校验失败返回登录页面 通过比对捕捉e.isLogin.code 的数值20000
      return router.go("/login")
    }
  }

  //重新渲染 
  await showAdminList(res)

  // console.log(document); //DOM 这样操控元素节点
  //添加管理员功能(点击保存按钮发送axios请求)
  const oSaveAdmin = document.getElementById("saveAdminBtn");
  // console.log("oSaveAdmin", oSaveAdmin);
  document.onclick = async function (e) {

    //打印不出来 因为 管理员列表页面 渲染了 点击事件被重置了 没有点击事件  
    //解决方案 事件委派 给document 绑定 事件 
    // console.log(11);
    //添加管理员逻辑
    if (e.target.id === "saveAdminBtn") {
      // console.log(11);

      //获取用户输入的信息  //获取元素 通过name 获取相应元素
      const adminNameValue = document.adminForm.adminName.value.trim();
      const passWordValue = document.adminForm.passWord.value.trim();
      const rePassWordValue = document.adminForm.rePassword.value.trim();

      // console.log(rePassWordValue);
      //验证输入是否合法
      //判断是否为空 XX.trim（） 去除左右空格
      //错误优先 如果为空 adminNameValue is false !false true 进if 错误处理 有一个为空 都不行 所以 ||或
      if (!adminNameValue || !passWordValue || !rePassWordValue) {
        return alert("账号密码不能为空!!!!")
      }
      //判断两次密码是否一致
      if (passWordValue !== rePassWordValue) {
        return alert("两次密码输入的不一致")
      }
      //提交表单 Axios 请求 提交数据
      //提交数据过程 容易报错 try catch 
      try {

        await addAdminRequest({ adminName: adminNameValue, passWord: passWordValue, regTime: new Date().toLocaleString() })

        alert("添加成功")

        //完善页面自动退出逻辑
        document.getElementById("closeAdminBtn").click();
        document.adminForm.reset();
        //添加成功 重新渲染页面
        await showAdminList(res)

        //捕获异常
      } catch (e) {
        //异常信息
        alert("有异常:" + e.message)
        document.adminForm.reset();

        //判断是否是权限异常
        if (!e.isLogin) {
          //权限校验失败返回登录页面 通过比对捕捉e.isLogin.code 的数值20000
          return router.go("/login")
        }

      }

    }
    // 删除管理员逻辑
    //通过事件委派 拿到要删除管理员列表内的按钮 通过 节点名称拿到 按钮 nodeName parentNode
    if (e.target.nodeName === "BUTTON" && e.target.parentNode.nodeName === "TD") {

      try {

        let adminName = e.target.dataset.adminname
        await deleteRequest({ adminName })
        showAdminList(res)
        alert("删除" + adminName + "成功")

      } catch (e) {
        alert("删除失败" + e.message + "异常")

        //判断是否是权限异常
        if (!e.isLogin) {
          //权限校验失败返回登录页面 通过比对捕捉e.isLogin.code 的数值20000
          return router.go("/login")
        }

      }

    }




  }

}


